﻿package MainClassPackage;

import XML.*;
import Source.*;
import gui.*;
import java.awt.EventQueue;
import java.io.IOException;
import javax.swing.JOptionPane;

public class mainClass 
{
    public static DataXmlList journal;
    public static DataXmlList enotherJournal; //поле - идентификатор. Если поменяли имя файла, сменится
    private static Task threadingTask; //ближайшая задача
    public static Thread threadOfTask; //поток ближайщей задачи
    public final static Object x=new Object();
    private static GUI s;
    public static void main(String arg[])
    {
        journal=new DataXmlList(); //открывает по умолчанию сразу файл list_of_task.xml
        enotherJournal=journal;
        threadingTask=journal.getEarliestTask();
        if(threadingTask==null)
        {
            //создание нового потока главное окно
            new Runnable(){
                public void run()
                {
                    try 
                    {
                        s= new GUI(journal,x);
                        s.setVisible(true);
                    } catch (Exception e) 
                    {
                        e.printStackTrace();
                    }
                }
            }.run();
        }else{
            //создание нового потока главное окно
            new Runnable(){
                public void run()
                {
                    try 
                    {
                        s= new GUI(journal,x);
                        s.setVisible(true);
                    } catch (Exception e) 
                    {
                        e.printStackTrace();
                    }
                }
            }.run();
            //запуск ближайшей задачи
            threadOfTask=new Thread(journal.getEarliestTask());
            threadOfTask.start();
        }
        try{
        while(true){
            synchronized(x){
                x.wait();
                //будят только в двух случаях
                //изменился файл
                if(enotherJournal!=journal){
                    try{
                    journal.save();
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(null, "Ошибка, не удалось сохранить файл при смене!", "Ошибка", JOptionPane.ERROR_MESSAGE);
                    }
                    s.resetJournal(enotherJournal);
                    journal=enotherJournal;
                    //запускаем ближайшую задачу нового журнала
                    Task h=journal.getEarliestTask();
                    if(h!=null){
                        threadOfTask=new Thread(h);
                        threadOfTask.start();
                    }else{
                        threadOfTask.interrupt();//если в новом журнале нет задач на выполнение
                    }
                }
                else{//сменилась ближайшая задача
                    Task h=journal.getEarliestTask();
                    if(h!=null){
                        threadOfTask=new Thread(h);
                        threadOfTask.start();
                    }
                }
            }
        }
        } catch (InterruptedException ex) {
            System.exit(0);
        }
    }
}
